import unittest
from parameterized import parameterized


def add(x, y):
    return x+y

"""
    问题：
        如果有三组数据需要测试？
        [(1,1,2), (1,2,3), (0,3,3)]
    参数化
        为什么要参数化
            解决冗余代码问题
        什么是参数化
            说明：根据需求动态获取参数并引用的过程
        参数化应用场景
            场景：解决相同业务逻辑，不同测试数据问题。
        去那下
            parameterized	0.7.0
            
            # 查找所有安装的工具
            pip list
    应用
        1. 安装插件
            通过命令：
                安装：
                    pip install parameterized
                验证：
                    pip show parameterized
            通过pycharm：File --> setting --> Project 工程名称
            
        2. 应用插件
            1. 导包 from parameterized import parameterized
            2. 修饰测试函数 @parameterized.expand([数据])
                数据格式：
                    1. 单个参数：类型为列表
                    2. 多个参数：类型为列表嵌套元组
                    3. 在测试函数中的参数设置变量引用参数值，注意：变量的数量必须和数据值的个数相同
            
"""


# 写法 3 推荐: 数据通常来自 excel text ， self：会报错
def get_data():
    return [(1, 2, 3), (3, 0, 3), (2, 1, 3)]


# 定义测试类 并 继承
class Test01(unittest.TestCase):
    # 定义测试 注意：以test字母开头
    @parameterized.expand(get_data())
    def test_add(self, a, b, expect):
        # 调用 要测试的函数
        result = add(a, b)
        assert result == expect
